package com.msf.tutorial.java8.chapter7;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 归约
 */
public class C05Math {

    /**
     * 数组求和
     */
    public static void sum() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        // 第一种写法
        // 第一个参数为初始值
        int sum_1 = list.stream().reduce(0, (a, b) -> a + b);
        System.out.println(sum_1);

        // 第二种写法
        // 使用方法引用代替lambda
        int sum_2 = list.stream().reduce(0, Integer::sum);
        System.out.println(sum_1);

        // 第三种写法
        // 返回的是Optional
        list.stream().reduce((a, b) -> a + b).ifPresent(System.out::println);

        // 第四种写法
        // 返回的是Optional
        list.stream().reduce(Integer::sum).ifPresent(System.out::println);
    }

    /**
     * 最大值
     */
    public static void max() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.stream().reduce(Integer::max).ifPresent(System.out::println);
    }

    /**
     * 最小值
     */
    public static void min() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.stream().reduce(Integer::min).ifPresent(System.out::println);
    }

    /**
     * 求数组中元素的个数
     */
    public static void count() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        list.stream().map(i -> 1).reduce(Integer::sum).ifPresent(System.out::println);
    }

    public static void main(String[] args) {
    }

}
